/*
 * Basado en el libro de Duane A. Bailey, "Java Structures", pág. 189 y en la hoja de trabajo 4
 */
package Hoja6;

/**
 *
 * @param <E> 
 * @author María Fernanda Martínez
 */
public class Node<E>
{
    /**
     * Valor guardado en este elemento
     */
    protected E data; 
    /**
     * Referencia al siguiente elemento
     */
    protected Node<E> nextElement; 
    
    /**
     * Nombre: Node
     * Descipción: constructor de la clase
     * Pre: v no es null
     * Post: nuevo elemento construido como la nueva cabeza de la lista
     * @param v es un valor de tipo E
     * @param next es la referencia al siguiente elemento de tipo Node<E>
     */
    public Node(E v, Node<E> next)
    {
        data = v;
        nextElement = next;
    }

    
    /**
     * Nombre: Node
     * Descripción: Constructor de la clase
     * Pre: v no es null
     * Post: nueva cola de la lista constriudo
     * @param v
     */
    public Node(E v)
    {
        this(v,null);
    }

    /**
     * Nombre: next
     * Descipción: obtiene el siguiente elemento
     * Pre: existe nextElement
     * Post: regresa referencia al siguiente valor en la lista
     * No hay parámetro
     * @return tipo Node<E>
     */
    public Node<E> next()
    {
        return nextElement;
    }

    /**
     * Nombre: setNext
     * Descripción: asigna valor a nextElement
     * Pre: next no es null
     * Post: referencia a siguiente valor de la lista asignado
     * No hay valor de retorno
     * @param next de tipo Node<E>
     */
    public void setNext(Node<E> next)
    {
        nextElement = next;
    }

    /**
     * Nombre: value
     * Descripción: obtiene valor del elemento
     * Pre: existe el elemento
     * Post: se obtiene el valor asociado a este elemento
     * No hay parámetros
     * @return tipo E
     */
    public E value()
    {
        return data;
    }

    /**
     * Nombre: setValue
     * Descipción: asigna un valor al elemento de la lista
     * Pre: no hay
     * Post: valor asociado a este elemento asignado
     * No hay valor de retorno
     * @param value de tipo E
     */
    public void setValue(E value)
    {
        data = value;
    }
}